package repository

import (
	"Data-API-MCP/backend/internal/domain/entity"
	"context"
)

// APIRepository API仓储接口
type APIRepository interface {
	// Create 创建API
	Create(ctx context.Context, api *entity.API) error
	// Update 更新API
	Update(ctx context.Context, api *entity.API) error
	// Delete 删除API
	Delete(ctx context.Context, id string) error
	// FindByID 根据ID查找API
	FindByID(ctx context.Context, id string) (*entity.API, error)
	// FindByName 根据名称查找API
	FindByName(ctx context.Context, name string) (*entity.API, error)
	// List 获取API列表
	List(ctx context.Context, offset, limit int) ([]*entity.API, error)
	// Count 获取API总数
	Count(ctx context.Context) (int64, error)
	// ListByConnectionID 获取指定连接的API列表
	ListByConnectionID(ctx context.Context, connectionID string, offset, limit int) ([]*entity.API, error)
	// CountByConnectionID 获取指定连接的API总数
	CountByConnectionID(ctx context.Context, connectionID string) (int64, error)

	// API版本操作
	CreateVersion(ctx context.Context, version *entity.APIVersion) error
	UpdateVersion(ctx context.Context, version *entity.APIVersion) error
	DeleteVersion(ctx context.Context, id string) error
	FindVersionByID(ctx context.Context, id string) (*entity.APIVersion, error)
	ListVersions(ctx context.Context, apiID string) ([]*entity.APIVersion, error)

	// API文档操作
	CreateDoc(ctx context.Context, doc *entity.APIDoc) error
	UpdateDoc(ctx context.Context, doc *entity.APIDoc) error
	FindDocByAPIID(ctx context.Context, apiID string) (*entity.APIDoc, error)

	// API状态操作
	Publish(ctx context.Context, id string) error
	Unpublish(ctx context.Context, id string) error
	FindByServiceID(ctx context.Context, serviceID string) ([]*entity.API, error)
}
